' Coin Hunt
' A FreeBASIC game by MagicalWizzy (found here: https://retrocoders.phatcode.net/index.php?topic=198.0;topicseen)
' This BASIC Anywhere Machine version by Charlie Veniot
' Changes (additions, edits, deletes) noted with the pencil emoji: ✏
' ✏: all instances of "chr" changed to "chr$"
' ✏: all instances of "str" changed to "chr$"
' ✏: BAM does not have the "multikey" function, so mods noted in the code
_INITAUDIO ' ✏
_ALERT(_
string$(40, "-") + CHR$(13) + _
"Welcome to Coin Hunt!\n" + _
string$(40, "-") + CHR$(13) + CHR$(13) + _
"Use the arrow keys to move your player around to get all the coins!" + CHR$(13) + CHR$(13) + _
"Make sure you avoid those pesky monsters as they are likely to run up on you at any time!\n\n" ) '✏ added _ALERT
CONST KEY_UP$ = CHR$(0)+CHR$(72), _
KEY_LEFT$ = CHR$(0)+CHR$(75), _
KEY_RIGHT$ = CHR$(0)+CHR$(77), _
KEY_DOWN$ = CHR$(0)+CHR$(80) ' ✏ Added KEY constants
Dim i as integer
Dim ii as integer
Dim iii as integer
Dim CoinCount as integer
Dim MonsterCount as integer
Dim CoinX(500) as byte
Dim CoinY(500) As byte
Dim MonsterX(500) as byte
Dim MonsterY(500) As byte
Dim PlayerX as byte
Dim PlayerY AS Byte
Dim MonsterOnCoin as byte ' ✏ BAM does not have the boolean type
Dim CoinsCollected as integer
Dim Score as integer
Dim Level as integer
Dim Lives as Byte
Dim Cycle as Byte
Declare Sub UpdateScore(score as integer, level as integer, lives as integer)
Randomize Timer
screen _newimage(800, 304, 0) '✏ Screen 19
' Welcome Screen
CLS
Color 14
Locate 17,35
Print string$(4, "-") + " Welcome to Coin Hunt! " + string$(3, "-") '✏ Modified
Locate 18,35
Print " MagicalWizzy (2022)"
Locate 19,31 '✏ Added
Print "(BAM version and mods by Charlie Veniot)" '✏ Added
Locate 21,20 '✏ 20,20
Print "Collect all the coins without being attacked by the monsters :)"
Locate 22,35 '✏ 21,35
Print " Press any key to begin."
junk$ = input$(1) '✏ Sleep
' First Start Variables
Cycle = 1
Score = 0
Level = 1
Lives = 3
RestartLevel:
' Draw Border
Cls
Color 9
Print chr$(201);: For i=1 to 98: Print chr$(205);: Next: Print chr$(187);
For ii = 2 to 36
Locate ii,1: Print Chr$(186)
Locate ii,100: Print Chr$(186);
Next
Print chr$(200);: For i=1 to 98: Print chr$(205);: Next: Print chr$(188);
Color 15
Locate 1, 16: Print " Coin Hunt! by MagicalWizzy (BAM version and mods by Charlie Veniot)" '✏ modified
PlayerX = 51
PlayerY = 18
CoinCount = 20 + (Level - 1) * 5
MonsterCount = 10 + (Level - 1) * 5
MonsterOnCoin = False
CoinsCollected = 0
UpdateScore(Score,Level,Lives)
' Draw Coins and Monsters
For i = 1 to CoinCount
redocoin:
CoinX(i) = int(rnd*98)+2
CoinY(i) = int(rnd*35)+2
if CoinX(i) = PlayerX And CoinY(i) = PlayerY Then
goto redocoin
end if
next
For i = 1 to MonsterCount
RegenMonster:
MonsterX(i) = int(rnd*98)+2
MonsterY(i) = int(rnd*35)+2
' Check if Monster is too close to player.
if MonsterY(i) >= 16 AND MonsterY(i) <= 20 And MonsterX(i) >= 49 AND MonsterX(i) <= 53 Then goto RegenMonster
next
' Draw Coins and Monsters
Color 14
For i = 1 to CoinCount
Locate CoinY(i), CoinX(i)
Print chr$(248);
next
Color 12
For i = 1 to MonsterCount
Locate MonsterY(i), MonsterX(i)
Print chr$(234);
next
' Draw Player
Color 15
Locate PlayerY,PlayerX
Print chr$(153);
' Main Game Loop
Do
keyGet$ = INKEY$ '✏ ADDED
WHILE INKEY$ <> "" : WEND ' :'✏ ADDED
' Check if Player moves...
'✏ If MultiKey(1) then
'✏ ' Escape pressed, close game
'✏ end
'✏ End if
If TRUE THEN '✏ Cycle = 2 then
Cycle = 1
Color 15
If keyGet$ = KEY_RIGHT$ THEN '✏ MultiKey(77) then
Locate PlayerY, PlayerX
Print " ";
PlayerX = PlayerX + 1
If PlayerX >= 99 then PlayerX = 99
Locate PlayerY, PlayerX
Print chr$(153);
end if
If keyGet$ = KEY_LEFT$ THEN '✏ MultiKey(75) then
Locate PlayerY, PlayerX
Print " ";
PlayerX = PlayerX - 1
If PlayerX <= 2 then PlayerX = 2
Locate PlayerY, PlayerX
Print chr$(153);
end if
If keyGet$ = KEY_UP$ THEN '✏ MultiKey(72) then
Locate PlayerY, PlayerX
Print " ";
PlayerY = PlayerY - 1
If PlayerY <= 2 then PlayerY = 2
Locate PlayerY, PlayerX
Print chr$(153);
end if
If keyGet$ = KEY_DOWN$ THEN '✏ MultiKey(80) then
Locate PlayerY, PlayerX
Print " ";
PlayerY = PlayerY + 1
If PlayerY >= 36 then PlayerY = 36
Locate PlayerY, PlayerX
Print chr$(153);
end if
Else
Cycle = 2
end if
' Check if monster eats player
For i = 1 to MonsterCount
If PlayerX = MonsterX(i) And PlayerY = MonsterY(i) Then
Locate 17,32
Color 11
Print "A monster just ate you for breakfast!"
Beep
Sleep 5 '✏ 5000, 1
Beep
Lives = Lives - 1
If Lives = 0 then end
Goto RestartLevel
end if
next
' Check if Player found a Coin.
for i = 1 to CoinCount
if PlayerX = CoinX(i) and PlayerY = CoinY(i) then
CoinsCollected = CoinsCollected + 1
' Way to ignore coin once collected
CoinX(i) = 0
Score = Score + 1
UpdateScore(Score, Level, Lives)
end if
next
' Problems with coins disappearing - redrawing all coins
Color 14
For i = 1 to CoinCount
If CoinX(i) <> 0 Then
Locate CoinY(i), CoinX(i)
Print chr$(248);
end if
next
' Move monsters about
For i = 1 to MonsterCount
' Check if a coin is under the monster.
For iii = 1 to CoinCount
if CoinX(iii) = MonsterX(i) AND CoinY(iii) = MonsterY(i) Then
if CoinX(i) <> 0 Then
MonsterOnCoin = True
End if
end if
next
ii = int(rnd*6)+1
Color 14
Select Case ii
case 1
Locate MonsterY(i), MonsterX(i)
If MonsterOnCoin = True then Print chr$(248); Else Print " ";
MonsterX(i) = MonsterX(i) - 1
If MonsterX(i) <= 2 then MonsterX(i) = 2
Case 2
Locate MonsterY(i), MonsterX(i)
If MonsterOnCoin = True then Print chr$(248); Else Print " ";
MonsterX(i) = MonsterX(i) + 1
If MonsterX(i) >= 99 then MonsterX(i) = 99
Case 3
Locate MonsterY(i), MonsterX(i)
If MonsterOnCoin = True then Print chr$(248); Else Print " ";
MonsterY(i) = MonsterY(i) - 1.
If MonsterY(i) <= 2 then MonsterY(i) = 2
Case 4
Locate MonsterY(i), MonsterX(i)
If MonsterOnCoin = True then Print chr$(248); Else Print " ";
MonsterY(i) = MonsterY(i) + 1
If MonsterY(i) >= 36 then MonsterY(i) = 36
Case 5
' Monster stays still
Case 6
' Also stays still
end select
MonsterOnCoin = False
Color 12
Locate MonsterY(i), MonsterX(i)
Print chr$(234);
next
' Check if monster eats player
For i = 1 to MonsterCount
If PlayerX = MonsterX(i) And PlayerY = MonsterY(i) Then
Locate 17,32
Color 11
Print "A monster just ate you for breakfast!"
Beep
Sleep 5 '✏ 5000, 1
Beep
Lives = Lives - 1
If Lives = 0 then
cls
Print "You got " + str$(Score) + " coins. Well done. You did well. Game over."
Sleep 5 '✏ 5000, 1
end
End if
Goto RestartLevel
end if
next
If CoinsCollected >= CoinCount Then
Locate 17,28
Color 11
Print "Great Job - You got all the coins! Level up."
Beep
Sleep 3 '✏ 3000, 1
Beep
Level = Level + 1
Goto RestartLevel
end if
Sleep 0.07 - 0.005 * Level '✏ 70,1
loop
'✏ beep
'✏ Sleep
End
Sub UpdateScore(score as integer, level as integer, lives as integer) '✏ removed "Private"
Dim i as byte
Locate 37,1
Color 9
Print chr$(200);: For i=1 to 98: Print chr$(205);: Next: Print chr$(188);
Color 11
Locate 37, 3
Print " Score: " + str$(score) + " ";
Locate 37, 46
Print " Level: " + str$(level) + " ";
Locate 37, 89
Print " Lives: " + str$(lives) + " ";
end sub